package com.wicket.okrfinance.dal.po.mbg;

import com.baomidou.mybatisplus.annotation.*;
import com.wicket.okrfinance.common.annotations.LikeFlag;
import com.wicket.okrfinance.common.annotations.OrderFlag;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.beans.BeanUtils;

/**
 *
 *
 * @author xxx
 */
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("oms_bill")
public class OmsBill extends BaseEntity {

  private static final long serialVersionUID = 1L;

  /**
   * 对方logo
   */
  @TableField(value = "opposite_logo")
  @ApiModelProperty("对方logo")
  private String oppositeLogo;

  /**
   * 对方名称
   */
  @TableField(value = "opposite_name")
  @ApiModelProperty("对方名称")
  private String oppositeName;

  /**
   * 对方支付渠道账户（账户编码）
   */
  @TableField(value = "opposite_account_code")
  @ApiModelProperty("对方支付渠道账户（账户编码）")
  private String oppositeAccountCode;

  /**
   * 对方支付渠道账户名称
   */
  @TableField(value = "opposite_account_name")
  @ApiModelProperty("对方支付渠道账户名称")
  private String oppositeAccountName;

  /**
   * 对方银行开户行名称
   */
  @TableField(value = "opposite_opening_bank_name")
  @ApiModelProperty("对方银行开户行名称")
  private String oppositeOpeningBankName;

  /**
   * 收支方式 ONLINE_PAYMENT:在线支付 PAY_DELIVERY:货到付款 CASH:现金 ON_CREDIT:赊账 TALLY:记账
   */
  @TableField(value = "bill_method")
  @NotNull(message = "收支方式不能为空")
  @ApiModelProperty("收支方式")
  private String billMethod;

  /**
   * 支付渠道 ALIPAY:支付宝 WE_CHAT_PAY:微信支付 BANK_CARD:银行卡
   */
  @TableField(value = "pay_channel")
  @ApiModelProperty("支付渠道")
  private String payChannel;

  /**
   * 支付渠道支付单号
   */
  @TableField(value = "pay_channel_order_no")
  @ApiModelProperty("支付渠道支付单号")
  private String payChannelOrderNo;

  /**
   * 关联业务单据对象ID
   */
  @TableField(value = "biz_bill_object_id")
  @ApiModelProperty("关联业务单据对象ID")
  private String bizBillObjectId;

  /**
   * 关联业务单据对象类型 TRADING_ORDER:交易订单 WITHDRAWAL_DOCUMENT:提现单 PROJECT:项目
   */
  @TableField(value = "biz_bill_object_type_code")
  @ApiModelProperty("关联业务单据对象类型")
  private String bizBillObjectTypeCode;

  /**
   * 账单状态 UNDERWAY:进行中 COMPLETE:完成 CLOSE:关闭
   */
  @TableField(value = "bill_status")
  @NotNull(message = "账单状态不能为空")
  @ApiModelProperty("账单状态")
  private String billStatus;

  /**
   * 生态账户类型编码 ORG_POOL_ACCOUNT:组织发行账户 TARGET_CONTENT_ACCOUNT:目标内容账户
   */
  @TableField(value = "ecological_account_type_code")
  @NotNull(message = "生态账户类型编码不能为空")
  @ApiModelProperty("生态账户类型编码")
  private String ecologicalAccountTypeCode;

  /**
   * 冗余发行体系类型编码 CAPITAL_SYSTEM:资金体系 INTEGRAL_SYSTEM:积分体系
   */
  @TableField(value = "distribution_system_type_code")
  @NotNull(message = "冗余发行体系类型编码不能为空")
  @ApiModelProperty("冗余发行体系类型编码")
  private String distributionSystemTypeCode;

  /**
   * 是否组织正式财务标准 TRUE:是 FALSE:否
   */
  @TableField(value = "is_org_official_account_nom")
  @NotNull(message = "是否组织正式财务标准不能为空")
  @ApiModelProperty("是否组织正式财务标准")
  private String isOrgOfficialAccountNom;

  /**
   * 关联发行账户ID
   */
  @TableField(value = "distribution_account_id")
  @ApiModelProperty("关联发行账户ID")
  private String distributionAccountId;

  /**
   * 记录结算引擎ID
   */
  @TableField(value = "expenses_settle_engine_id")
  @ApiModelProperty("记录结算引擎ID")
  private String expensesSettleEngineId;

  /**
   * 账单流水号ID
   */
  @TableId(value = "bill_flow_id", type = IdType.UUID)
  @NotNull(message = "billFlowId不能为空")
  private String billFlowId;

  /**
   * 账单金额
   */
  @TableField(value = "bill_amount")
  @NotNull(message = "账单金额不能为空")
  @ApiModelProperty("账单金额")
  private Double billAmount;

  /**
   * 收支类型 INCOME:收入 SPENDING:支出
   */
  @TableField(value = "bill_type_code")
  @NotNull(message = "收支类型不能为空")
  @ApiModelProperty("收支类型")
  private String billTypeCode;

  /**
   * 是否发生方账单 TRUE:是 FALSE:否
   */
  @TableField(value = "is_origin_bill")
  @NotNull(message = "是否发生方账单不能为空")
  @ApiModelProperty("是否发生方账单")
  private String isOriginBill;

  /**
   * 是否对接财务 TRUE:是 FALSE:否
   */
  @TableField(value = "is_butt_finance")
  @NotNull(message = "是否对接财务不能为空")
  @ApiModelProperty("是否对接财务")
  private String isButtFinance;

  /**
   * 流水业务故事信息
   */
  @TableField(value = "bill_biz_story")
  @NotNull(message = "流水业务故事信息不能为空")
  @ApiModelProperty("流水业务故事信息")
  private String billBizStory;

  /**
   * 账单归属账户ID
   */
  @TableField(value = "bill_account_id")
  @NotNull(message = "账单归属账户ID不能为空")
  @ApiModelProperty("账单归属账户ID")
  private String billAccountId;

  /**
   * 账单归属账户余额
   */
  @TableField(value = "bill_account_balance")
  @NotNull(message = "账单归属账户余额不能为空")
  @ApiModelProperty("账单归属账户余额")
  private Double billAccountBalance;

  /**
   * 账单归属账户主体类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标 DEPT:部门
   */
  @TableField(value = "bill_object_type_code")
  @NotNull(message = "账单归属账户主体类型编码不能为空")
  @ApiModelProperty("账单归属账户主体类型编码")
  private String billObjectTypeCode;

  /**
   * 账单归属账户主体ID
   */
  @TableField(value = "bill_object_id")
  @NotNull(message = "账单归属账户主体ID不能为空")
  @ApiModelProperty("账单归属账户主体ID")
  private String billObjectId;

  /**
   * 对方账户ID
   */
  @TableField(value = "opposite_account_id")
  @ApiModelProperty("对方账户ID")
  private String oppositeAccountId;

  /**
   * 对方账户余额
   */
  @TableField(value = "opposite_account_balance")
  @ApiModelProperty("对方账户余额")
  private Double oppositeAccountBalance;

  /**
   * 对方账户归属主体类型编码
   */
  @TableField(value = "opposite_object_type_code")
  @ApiModelProperty("对方账户归属主体类型编码")
  private String oppositeObjectTypeCode;

  /**
   * 对方账户归属主体ID
   */
  @TableField(value = "opposite_object_id")
  @ApiModelProperty("对方账户归属主体ID")
  private String oppositeObjectId;

  /**
   * 操作人就职记录ID
   */
  @TableField(value = "operation_induction_id")
  @NotNull(message = "操作人就职记录ID不能为空")
  @ApiModelProperty("操作人就职记录ID")
  private String operationInductionId;

  /**
   * 费用科目类型
   */
  @TableField(value = "account_subject_type_code")
  @ApiModelProperty("费用科目类型")
  private String accountSubjectTypeCode;

  /**
   * 创建人就职记录ID
   */
  @TableField(value = "create_induction_id")
  @NotNull(message = "创建人就职记录ID 不能为空")
  @ApiModelProperty("创建人就职记录ID ")
  private String createInductionId;

  /**
   * 费用科目ID
   */
  @TableField(value = "account_subject_id")
  @ApiModelProperty("费用科目ID")
  private String accountSubjectId;

  /**
   * 冗余内容科目ID
   */
  @TableField(value = "contnet_account_subjectld")
  @ApiModelProperty("冗余内容科目ID")
  private String contnetAccountSubjectld;

  /**
   * 操作时间
   */
  @TableField(value = "operate_time")
  @NotNull(message = "操作时间不能为空")
  @ApiModelProperty("操作时间")
  private Date operateTime;

  /**
   * 创建时间
   */
  @TableField(value = "create_time")
  @NotNull(message = "创建时间不能为空")
  @ApiModelProperty("创建时间")
  private Date createTime;

  /**
   * 是否作废 TRUE:是 FALSE:否
   */
  @TableField(value = "is_valid")
  @NotNull(message = "是否作废不能为空")
  @ApiModelProperty("是否作废")
  private String isValid;

  /**
   * 创建于空间ID
   */
  @TableField(value = "space_id")
  @NotNull(message = "创建于空间ID不能为空")
  @ApiModelProperty("创建于空间ID")
  private String spaceId;

  /**
   * 创建于联盟应用ID
   */
  @TableField(value = "app_id")
  @NotNull(message = "创建于联盟应用ID不能为空")
  @ApiModelProperty("创建于联盟应用ID")
  private String appId;

  /**
   * 11111冗余资金来源ID
   */
  @TableField(value = "capital_source_id")
  @ApiModelProperty("11111冗余资金来源ID")
  private String capitalSourceId;
}
